home *** CD-ROM | disk | FTP | other *** search
/ PC World Interactive 7 / PC World Interactive 7.iso / program / qbprog.EXE / MODENE.TXT < prev    next >
Text File  |  1980-01-10  |  21KB  |  384 lines

  1.   ┌──────────────────────────────────────────────────────────────────────────┐
  2.   │┌────────────────────────────────────────────────────────────────────────┐│
  3.   ││                                                                        ││
  4.   ││          QuickBasic'de karƒìlaƒtìºìm sorunlarì nasìl aƒtìm?            ││
  5.   ││                                                                        ││
  6.   ││            Konu:    Modemin Basic'de programlanmasì  (#3)              ││
  7.   ││                                                                        ││
  8.   │└────────────────────────────────────────────────────────────────────────┘│
  9.   │ PS 29 · Aralìk'95                                     Gürol Demir        │
  10.   └──────────────────────────────────────────────────────────────────────────┘
  11.                                                                               
  12.        
  13.        ÿki aydìr devam eden yazì dizimizde aºìrlìklì olarak modem programlama
  14. için gerekli olan donanìm ve makine dili bilgileri vermiƒtik. Bu bilgilerin
  15. desteºi ile artìk bizim tanìdìºìmìz basic diline yeniden merhaba diyebiliriz.
  16.  
  17.         Modem programlamada gerekli basic komutlarìna göz atalìm.
  18.                            
  19.                             ┌─────────────────────┐
  20. ────────────────────────────┤ OPEN "COM... Deyimi ├──────────────────────────
  21.                             └─────────────────────┘
  22.  
  23.         Amacì   : Bir iletiƒim dosyasì açmak
  24.         Dili    : GwBasic, TurboBasic, Qbasic, QuickBasic, ....
  25.         Format  : OPEN "COMn:[parametreler] FOR RANDOM AS #DosyaNo
  26.  
  27.         
  28. COMn         : Seri geniƒleme yuvasìnìn numarasìdìr. Com1 veya Com2 olabilir,
  29.                diºerlerine (Com3,Com4) izin verilmez. Bu aynì zamanda IRQ3 ve
  30.                IRQ4'den baƒkasìna da izin verilmeyeceºi anlamìndadìr.
  31.  
  32. DosyaNo      : Basic'in okuma yazma iƒlemleri için kullanacaºì numaradìr.
  33.  
  34. Parametreler : Hìz + Parite + Geniƒlik + Dur + Önemsiz diºer parametrelerdir.
  35.  
  36.                Hìz      : 75,(..),2400,4800, 9600 Bps'dir.Varsayìlan 300'dür. 
  37.                           9600 Bps'den hìzlì iletiƒime izin verilmez.
  38.                Parite   : Gönderme ve alma için karƒìlìk belirtir. 
  39.                           S,O,M,E,N deºerlerini alabilirler. (tavsiye="N")
  40.                Geniƒlik : ÿletiƒime konu karakter geniƒliºini belirtir.
  41.                           4,5,6,7,8 deºerlerini alabilir. Varsayìm 7 dir.
  42.                           Varsayìlan uygulandìºìnda Türkçe karakterler modem
  43.                           yoluyla iletilemezler. Bu nedenle "8" kullanìlmak 
  44.                           zorundadìr.
  45.                Dur      : Durdurma bitlerinin sayìsìnì gösterir. Yüksek hìzda
  46.                           daima "1" kullanìlìr. 
  47.                           
  48.                Diºer    : Önemsizdir. Yine de help dosyasìna bakìnìz.
  49.         
  50.         Tipik bir iletiƒim dosyasì ƒu ƒekilde bir komutla açìlìr:
  51.                ┌─────────────────────────────────────────┐
  52.                │ OPEN "Com2:2400,N,8,1" FOR RANDOM AS #1 │
  53.                └─────────────────────────────────────────┘
  54.  
  55.         Burda geçen; 
  56.         
  57.                 Com2  yerine sadece Com1 atternatifdir.
  58.                 2400  yerine ise normal koƒullarda 4800 veya 9600 alternatif
  59.                       olabilir.
  60.                 N,8,1 yerine atternatif kullanmayìnìz.
  61.                 #1    yerine makinenizin izin verdiºi herhangi bir dosya
  62.                       numarasì olabilir.
  63.  
  64.  
  65.          ┌─────────────────────────────────────────┐
  66. Soru  >  │ Basic OPEN "COM..." deyiminde ne yapar? │
  67.          └─────────────────────────────────────────┘
  68.          
  69.          1) Bellek ayìrìr : Basic baƒlarken "C" anahtarì ile bir iletiƒim                    
  70. bellek miktarì belirtilmiƒ ise (Örn. QBX /C:16000 gibi) bu büyüklükte, yoksa         
  71. 512 byte büyüklüºünde bir belleºi iletiƒim de ambar olarak kullanmak üzere
  72. ayìrìr.
  73.          2) Bu komutla verilen dosya numarasì bundan böyle sanki bir fiziki
  74. dosya numarasì gibi görülsün diye ayarlamalar yapar.
  75.  
  76.          3) Yeni bir interrupt rutini yazar. Eºer OPEN "Com1... ise bu rutini
  77. Ch kesmesine, OPEN"Com2... ise Bh kesmesine atar bundan evvel eski kesmelere
  78. ait adresleri saklar.
  79.  
  80.              Bu rutinde kullanìlmak üzere ilgili aygìtìn adresini eºer Com1
  81. ise 40h:00 dan, eºer Com2 ise 40h:02'den alìr.
  82.  
  83.          4) Modem portunu yani 40h:00 veya 40:02'den aldìºì adresin bir 
  84. fazlasìnì IRQ üretmek için programlar (OUT &H3F9, 11 gibi).
  85.                               
  86.          5) 8259 chip'inden IRQ hattì için onay alìr (Com1 için IRQ4, 
  87. Com2 için IRQ3).                    
  88.          
  89.           Yukardaki iƒlemlerden 3, 4 ve 5 nci maddeler bir basic programìnda
  90. müdahale edilmesi gerekenlerdir. Bunlarì daha evvel iƒledik. 1 ve 2 nci 
  91. maddeler ise bizim basic'den ödünç alacaklarìmìzdìr.
  92.  
  93.          ┌─────────────────────────────────┐
  94. Soru  >  │ Modemim Com4'de ise ne olacak ? │
  95.          └─────────────────────────────────┘
  96.          Hemen basic dilini bìrakìp Delphi'ye geçin gibi acizlik belirtisi
  97. bir cevap vermeyeceºim ama sorunun GwBasic'deki cevabìnì bilmiyorum. Bu
  98. nedenle eºer GwBasic kullanìyorsanìz Qbasic veya Quick Basic'e geçmenin tam 
  99. sìrasì diyerek GwBasic'de bu konudaki cahilliºimi ilan edebilirim.
  100.  
  101.          Qbasic ve üstü basic ailesinden diller Com1 ve Com2'nin adresini
  102. BIOS'dan alìrlar.
  103.  
  104.          ┌─────────────────────────────────┐
  105.          │ Bios'da                         │
  106.          │ 40h:00    Com1'in adresi        │
  107.          │ 40h:02    Com2'nin adresi       │
  108.          │ 40h:04    Com3'ün adresi        │
  109.          │ 40h:06    Com4'ün adresi        │
  110.          │                ƒeklinde tutulur │
  111.          └─────────────────────────────────┘
  112.  
  113.          Eºer modeminiz Com4'de ise ve iletiƒim dosyasì OPEN "Com1... ile
  114. açìlacak ise tek yapacaºìnìz ƒey "OPEN" komutundan evvel bios'un 40h:00 
  115. adresine &H2E8 adresini aktarmaktìr.
  116.  
  117.                               ┌──────────────┐
  118. ──────────────────────────────┤ CLOSE Deyimi ├───────────────────────────────
  119.                               └──────────────┘
  120.           Bu komutu modemi kapatmak için kullanacaºìz fazla bir esprisi
  121. yoktur. Format: CLOSE #DosyaNo (Örneºin CLOSE #1)  
  122.  
  123. >HangUp (Baºlantìnìn kesilmesi) :
  124.  
  125.           Modem kapatìlmadan evvel bir takìm iƒlemleri iptal edilmelidir.
  126. Kapatìlmaya çalìƒìlam modem o sìrada iletiƒim halinde veya bir telefon 
  127. çevirmekte olabilir. Modem ƒu iƒlemler ile kapatìlmalìdìr:
  128.          
  129.          ┌───────────────────────────────────────┐
  130.          │ PRINT #1, "ATH"                       │
  131.          │ PRINT #1, CHR$(13)                    │
  132.          │ PRINT #1, "ATZ"                       │
  133.          │ OUT Port + 4, (INP(Port + 4) AND 252) │
  134.          │ CLOSE #1                              │
  135.          └───────────────────────────────────────┘
  136.  
  137.                               ┌──────────────┐
  138. ──────────────────────────────┤ PRINT Deyimi ├───────────────────────────────
  139.                               └──────────────┘
  140.           Bu komutu modeme veri göndermek için kullanacaºìz fazla bir esprisi
  141. yoktur. Format: PRINT #DosyaNo,Veri$ (Örneºin PRINT #1, "ATZ")  
  142.  
  143.                           ┌─────────────────────────┐
  144. ──────────────────────────┤ INPUT$ ve LOC Deyimleri ├────────────────────────
  145.                           └─────────────────────────┘
  146.           Bu komutlarì modemden veri okumak için kullanacaºìz fazla bir 
  147. esprileri yoktur. (Örneºin A$ = INPUT$(LOC(1),#1)  
  148.  
  149.           
  150.                          ┌────────────────────────────┐
  151. ────**──**───******──────┤ Laf bitti, ƒimdi iƒ zamanì ├───────******──**──**─
  152.                          └────────────────────────────┘
  153.           Buraya kadar öºrendiklerimiz sayesinde ter türlü modemi basic'de
  154. programlayabiliriz. Parçalarì nasìl birleƒtireceºiz? Aƒaºìda verilen örneºi
  155. iyi incelemenizi öneririm. Aƒaºìda verilen yordamlarda mikro iƒlemcinin
  156. basic'e esir düƒmesinin bir yìllìk özeti yer almaktadìr. 
  157.  
  158. >ÿƒte size bir terminal programì çekirdeºi:
  159.  
  160.                           ┌───────────────────────┐ 
  161.                           │ Baƒlangìç Tavsiyeleri │
  162.    ┌──────────────────────┴───────────────────────┴───────────────────────┐
  163.    │'QBASIC'de de çalìƒìr                                                 │
  164.    │'     bu dilde bellek sorunu nedeniyle yavaƒ bir hìz seçiniz.         │
  165.    │                                                                      │
  166.    │'QuickBasic de çalìƒmasì için ise  versiyon 7.1 QBX /L QBX /C:32000   │
  167.    │'                                  versiyon 4.5 QB /L QB /C:32000     │
  168.    │'                                       ƒeklinde yüklenmelidir.       │
  169.    └──────────────────────────────────────────────────────────────────────┘
  170.  
  171.                ┌───────────────────────┐ 
  172.                │       Ana Program     │
  173.    ┌───────────┴───────────────────────┴──────────────┐
  174.    │DECLARE SUB EkranAc (Tip!)                        │
  175.    │DECLARE SUB Terminal ()                           │
  176.    │DECLARE SUB ModemiKapa (ModemAdresi!)             │
  177.    │DECLARE SUB ModemiAc (ModemAdresi!, Hiz!, IrqNo!) │
  178.    │                                                  │
  179.    │DIM SHARED Sakla(27)                              │
  180.    │                                                  │
  181.    │'=================================================│
  182.    │'Deºiƒkenler                                      │
  183.    │'Kendi modem bilgilerinizi giriniz                │
  184.    │                                                  │
  185.    │ Irq = 5: Port = &H3E8: Baud = 57600: Ansi = 1    │
  186.    │                                                  │
  187.    │'Seçenekler                                       │
  188.    │'Irq = 2: Port = &H2E8: Baud = 2400 : Ansi = 1    │
  189.    │'Irq = 3: Port = &H2F8: Baud = 4800 : Ansi = 0    │
  190.    │'Irq = 4: Port = &H3E8: Baud = 9600               │
  191.    │'Irq = 5: Port = &H3F8: Baud = 14400              │
  192.    │'Irq = 7              : Baud = 19200              │
  193.    │'                       Baud = 38400              │
  194.    │'                       Baud = 57600              │
  195.    │'                       Baud = 115200             │
  196.    │                                                  │
  197.    │'=================================================│
  198.    │'Program baƒlangìcì                               │
  199.    │CALL ModemiAc(Port, Baud, Irq)                    │
  200.    │EkranAc (Ansi)                                    │
  201.    │Terminal                                          │
  202.    │ModemiKapa (Port)                                 │
  203.    │END                                               │
  204.    │                                                  │
  205.    │                                                  │
  206.    │'=================================================│
  207.    │'IRQ hattìnìn açìlmasì için makine dili yordamì   │
  208.    │IRQSerbest:                                       │
  209.    │DATA &H50                  : 'PUSH AX             │
  210.    │DATA &H53                  : 'PUSH BX             │
  211.    │DATA &H51                  : 'PUSH CX             │
  212.    │DATA &HFA                  : 'CLI                 │
  213.    │DATA &H31, &HC9            : 'XOR CX,CX           │
  214.    │DATA &HB1, 2               : 'MOV CL,02           │
  215.    │DATA &HBB, 1, 0            : 'MOV BX,0001         │
  216.    │DATA &HD3, &HE3            : 'SHL BX,CL           │
  217.    │DATA &HF7, &HD3            : 'NOT BX              │
  218.    │DATA &HE4, &HA1            : 'IN AL,A1            │
  219.    │DATA &H20, &HF8            : 'AND AL,BH           │
  220.    │DATA &HE6, &HA1            : 'OUT A1,AL           │
  221.    │DATA &HE4, &H21            : 'IN AL,21            │
  222.    │DATA &H20, &HD8            : 'AND AL,BL           │
  223.    │DATA &HE6, &H21            : 'OUT 21,AL           │
  224.    │DATA &HFB                  : 'STI                 │
  225.    │DATA &H59                  : 'POP CX              │
  226.    │DATA &H5B                  : 'POP BX              │
  227.    │DATA &H58                  : 'POP AX              │
  228.    │DATA &HCB                  : 'RETF                │
  229.    └──────────────────────────────────────────────────┘
  230.                                      ┌───────────────────────┐ 
  231.                                      │  Ekran Açma Yordamì   │
  232.                             ┌────────┴───────────────────────┴────────┐
  233.                             │'Ekran Ansi veya TTY modda açìlìyor      │
  234.                             │SUB EkranAc (Tip)                        │
  235.                             │  IF Tip = 1 THEN                        │
  236.                             │    OPEN "CON" FOR OUTPUT AS #2    'Ansi │
  237.                             │  ELSE                                   │
  238.                             │   OPEN "SCRN:" FOR OUTPUT AS #2   'TTY  │
  239.                             │  END IF                                 │
  240.                             │END SUB                                  │
  241.                             └─────────────────────────────────────────┘
  242.  
  243.                      ┌───────────────────────┐ 
  244.                      │  Modem Açma Yordamì   │
  245.    ┌─────────────────┴───────────────────────┴────────────────┐
  246.    │SUB ModemiAc (ModemAdresi, Hiz, IrqNo)                    │
  247.    │'Bazì deºerler saklanìyor                                 │
  248.    │  DEF SEG = 0                                             │
  249.    │  FOR I = 40 TO 63              'ÿnterrupt adresleri      │
  250.    │    Sakla(I - 40) = PEEK(I)                               │
  251.    │  NEXT                                                    │
  252.    │  Sakla(24) = INP(&H21)          '8259 (PIC) deºerleri    │
  253.    │  Sakla(25) = INP(&HA1)                                   │
  254.    │  Sakla(26) = PEEK(1026)         'Com2 eski aygìt adresi  │
  255.    │  Sakla(27) = PEEK(1027)                                  │
  256.    │                                                          │
  257.    │'=========================================================│
  258.    │'Com2'ye bizim modem atanìyor                             │
  259.    │  POKE 1027, ModemAdresi \ 256                            │
  260.    │  POKE 1026, ModemAdresi AND 255                          │
  261.    │                                                          │
  262.    │'=========================================================│
  263.    │'Yeni aygìt (bizim modem) açìlìyor                        │
  264.    │  OPEN "Com2:2400,N,8,1" FOR RANDOM AS #1                 │
  265.    │                                                          │
  266.    │'=========================================================│
  267.    │'Modem seçilen hìz için ayarlanìyor                       │
  268.    │  Sakla = INP(ModemAdresi + 3)                            │
  269.    │  OUT ModemAdresi + 3, 128                                │
  270.    │  OUT ModemAdresi, 115200 / Hiz                           │
  271.    │  OUT ModemAdresi + 3, Sakla                              │
  272.    │                                                          │
  273.    │'=========================================================│
  274.    │'Com2'ye ait IRQ3 kapatìlìyor, PIC deºerleri iade ediliyor│
  275.    │  OUT &H21, Sakla(24)                                     │
  276.    │  OUT &HA1, Sakla(25)                                     │
  277.    │                                                          │
  278.    │'=========================================================│
  279.    │'Bizim modeme ait IRQ'nun, Com2'ye ait interruptu         │
  280.    │'kullanmasì saºlanìyor                                    │
  281.    │  IntAdres = (IrqNo + 8) * 4                              │
  282.    │  POKE IntAdres, PEEK(44)                                 │
  283.    │  POKE IntAdres + 1, PEEK(45)                             │
  284.    │  POKE IntAdres + 2, PEEK(46)                             │
  285.    │  POKE IntAdres + 3, PEEK(47)                             │
  286.    │                                                          │
  287.    │'=========================================================│
  288.    │'Bizim modemin IRQ'su için 8259'dan izin alìnìyor         │
  289.    │   RESTORE IRQSerbest                                     │
  290.    │   REDIM Oku(31)                                          │
  291.    │   DEF SEG = VARSEG(Oku(0))                               │
  292.    │                                                          │
  293.    │    FOR PicMask = 0 TO 31                                 │
  294.    │       READ D%                                            │
  295.    │       IF PicMask = 7 THEN D% = IrqNo                     │
  296.    │       POKE VARPTR(Oku(0)) + PicMask, D%                  │
  297.    │    NEXT PicMask                                          │
  298.    │                                                          │
  299.    │   CALL ABSOLUTE(VARPTR(Oku(0)))                          │
  300.    │                                                          │
  301.    │'Modemin açìlmasì tamamlandì                              │
  302.    │END SUB                                                   │
  303.    └──────────────────────────────────────────────────────────┘
  304.                      
  305.                      
  306.                             ┌───────────────────────┐ 
  307.                             │ Modem Kapama Yordamì  │
  308.           ┌─────────────────┴───────────────────────┴────────────────┐
  309.           │SUB ModemiKapa (ModemAdresi)                              │
  310.           │'Modem kapatìlìyor                                        │
  311.           │  PRINT #1, "ATH"                                         │
  312.           │  OUT ModemAdresi + 4, (INP(ModemAdresi + 4) AND 252)     │
  313.           │  CLOSE #1                                                │
  314.           │'=========================================================│
  315.           │'Eski deºerler iade ediliyor                              │
  316.           │  DEF SEG = 0                                             │
  317.           │  FOR I = 40 TO 63:             'ÿnterrupt adresleri      │
  318.           │    POKE I, Sakla(I - 40)                                 │
  319.           │  NEXT                                                    │
  320.           │  OUT &H21, Sakla(24)           'PIC deºerleri            │
  321.           │  OUT &HA1, Sakla(25)                                     │
  322.           │  POKE 1026, Sakla(26)          'Com2 adresi              │
  323.           │  POKE 1027, Sakla(27)                                    │
  324.           │END SUB                                                   │
  325.           └──────────────────────────────────────────────────────────┘
  326.                      
  327.                  ┌─────────────────────────────┐ 
  328.                  │ Terminal (Yerel iletiƒim)   │
  329.    ┌─────────────┴─────────────────────────────┴──────────────┐
  330.    │SUB Terminal                                              │
  331.    │COLOR 7, 1                                                │
  332.    │CLS                                                       │
  333.    │LOCATE 1, 1, 1: PRINT "Modem ÿnstall ediliyor"            │
  334.    │PRINT #1, "ATZ"                                           │
  335.    │RR = FIX(TIMER)                                           │
  336.    │DO                                                        │
  337.    │  IF LOC(1) > 0 THEN B$ = B$ + INPUT$(LOC(1), #1)         │
  338.    │  IF INSTR(B$, "OK") > 0 THEN EXIT DO                     │
  339.    │  IF FIX(TIMER) - RR > 5 THEN                             │
  340.    │     PRINT "Modem Port Adresi ve IRQ deºerleri hatalì !!" │
  341.    │     EXIT SUB                                             │
  342.    │  END IF                                                  │
  343.    │LOOP                                                      │
  344.    │                                                          │
  345.    │LOCATE 1, 1, 1                                            │
  346.    │PRINT "Modem uygun bulundu, baƒladì (Çìk샠için Esc)"     │
  347.    │DO                                                        │
  348.    │   A$ = INKEY$                                            │
  349.    │      IF A$ <> "" THEN                                    │
  350.    │          IF ASC(A$) = 27 THEN EXIT DO                    │
  351.    │          PRINT #1, A$; :      'Modem girdisi             │
  352.    │      ELSE                                                │
  353.    │          IF LOC(1) > 0 THEN                              │
  354.    │             B$ = INPUT$(LOC(1), #1)                      │
  355.    │             PRINT #2, B$; :   'Modem çìktìsì             │
  356.    │          END IF                                          │
  357.    │      END IF                                              │
  358.    │LOOP                                                      │
  359.    │END SUB                                                   │
  360.    └──────────────────────────────────────────────────────────┘
  361.  
  362.        Basic'de modemin programlanmasì ile ilgili yazì dizimiz burada sona 
  363. ermektedir. Modemin programlanmasìnda sadece temel taƒlarì verilmiƒtir.       
  364. Bilgisayarìn bir baƒka bilgisayar ile telefon hattì kullanarak irtibatìnì 
  365. verilen bilgiler ile saºlayabilirsiniz. Ve uzaktaki bir arkadaƒìnìz ile
  366. klavye üzerinden sohbet edebilirsiniz. 
  367.  
  368.        Ancak dosya transferi için iki birim arasìnda bir dosya transfer 
  369. protolu yapìlmasì gerekir. Harici olarak kullanìlan protokeller piyasada
  370. mevcuttur. En yaygìn olan Z modem iletiƒim protolu olup DSZ.EXE veya DSZ.COM
  371. isimli programlar ile haricen kullanìlabilir.       
  372.        
  373.        Görüƒmek üzere....
  374.  
  375. Adres:
  376.      PC World/Türkiye
  377.      PS-Gürol Demir
  378.      Eski Büyükdere cad.
  379.      Sanayi mah. Behçet sokak
  380.      No:25/B  Kat:5
  381.      80650 4.Levent / ÿSTANBUL
  382.  
  383. Internet : gurold@doruk.com.tr
  384.